package com.javaoopsix;

public class Demo {
    /*
    * 继承：思想
    *   1：解决问题：--->代码冗余,提高代码复用率
    *
    *   2：怎么实现：
    *         使用 extends关键字实现
    *
    *   3：可以继承哪些东西：
    *        1:可以继承父类中的非私有的属性和方法,除了构造方法外。
    *        2:在子类中可以显示的调用父类的构造方法，而且必须调用-->默认访问父类的无参。
    *               1):必须使用super关键字。
    *               2):必须在子类的构造方法的的第一句调用--->默认调用就不生效。
    *        3:在子类中可以调用，通过子类的类名调用。
    *   4：不能继承哪些东西：
    *        1:构造方法不参与继承。
    *        2:静态方法和静态属性不参与继承。
    *        3:被final修饰的变量不能被继承。
    *
    *   5：继承的特征：
    *       1):继承具备单根性，且具备延续性。
    *       2):在继承的关系中，必须先对父类的对象进行实例化后，再实例化子类实例。
    *
    *   6：继承的应用场景
    *        规则：符合is-a关系的设计使用继承
    *
    *   7：重写和多态
    *       重写：前提--->至少发生在2个或2个以上的类的继承关系中。
    *           为什么：
    *               当父类的行为不能满足子类需要，子类选择性的重写父类的行为。
    *           怎么实现：
    *               在子类中编写一个和父类一摸一样的方法。
    *           规则：
    *             1):方法名相同
                  2):参数列表相同
                  3):返回值类型相同或者是其子类
                  4):访问权限不能严于父类.
                  5):父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
    *             6):子类可以定义与父类同名的静态方法，以便在子类中隐藏父类的静态方法
    *             7):父类的私有方法不能被子类覆盖
                  8):不能抛出比父类方法更多的异常
    *           重写特点：
    *               1)：子类重写了父类的行为后，就会覆盖父类的行为。
    *
    *
    *   8:多态：同一个引用在不同情况下产生不同的实例。
    *         前提--->必须发生重写
    *
    *       应用场景：
    *            1：拿父类当形参。
    *            2：拿父类当返回值。
    *
    *       向上转型；父类的引用指向子类的实例。--->自动转换
    *       向下转型：将一个指向子类对象的父类引用赋给一个子类的引用--->强制类型装换
    *           --->为了访问子类的特有属性和方法。
    *
    *     instanceof：判断一个对象的实例是否是由某个类创建的。
    *
    *
    *       注意：
    *           当使用多态时候，重写了父类的方法，但是父类的方法基本不会再被执行了。
    *       --->出现代码冗余
    *
    *   9: 抽象方法/抽象类/接口：
    *        抽象方法：
    *           为什么：解决父类中的代码冗余...
    *           怎么实现：在父类方法返回值的前面使用abstract关键字修饰。
    *           特点：
    *              1):没有方法体。
    *              2):必须被子类重写。
    *              3):必须出现在抽象类中。
    *        抽象类:
    *           为什么：因为类中已经有了抽象的方法。
    *           怎么实现：在类前面使用abstract关键字修饰。
    *           特点：
    *             1):抽象类不能被实例化。
    *             2):抽象类中可以没有抽象方法，可以有非抽象方法。
    *             3):抽象类肯定会有子类去继承重写它里面的抽象方法。
    *
    *   抽象类VS普通类
    *       抽象类不能被实例化，普通类可以被实例化。
    *   抽象方法VS普通方法：
    *       有无方法体。
    *
    *   10:接口
    *       定义：接口就是纯净版的抽象类。
    *       为什么：因为类的继承只能单继承。
    *       怎么实现：在类前面使用interface键字修饰。
    *       特点：
    *             1):接口不可以被实例化。
    *             2):实现类必须实现接口的所有方法。
    *             3):实现类必须实现接口的所有方法。
    *             4):接口中的变量都是静态常量。
    *             5):接口之间是可以进行多继承的。
    *
    *       抽象类vs接口：
                相同点
                  代表系统的抽象层
                  都不能被实例化
                  都能包含抽象方法
                不同点
    *             在抽象类中可以为部分方法提供默认实现，而接口中只能包含抽象方法
    *             一个类只能继承一个直接的父类，但可以实现多个接口
    *             抽象类可以有构造方法，接口中没有构造方法。

    * tip：
    *   ==:
    *     1)基本数据类型：比较值
    *     2)引用数据类型：比较地址。
    *   equals():
    *      只能比较引用数据类型：
    *           String类是比较值，其他的类比较的是地址.
    * */

}
